/**
 * 通用工具函数库
 */

import { SHADOWS, CARD_STYLES } from '../styles/constants';

/**
 * 统一格式化景区/景点数据
 * @param {Object} item - 原始数据
 * @param {number} index - 索引
 * @returns {Object} 格式化后的数据
 */
export function formatAttractionData(item, index = 0) {
  return {
    id: item.id || item.scenicAreaId || String(index),
    name: item.areaName || item.name || '未知景区',
    areaName: item.areaName || item.name,
    coverImage: item.coverImage || item.image,
    image: item.coverImage || item.image,
    address: item.address || '',
    latitude: item.latitude ? parseFloat(item.latitude) : null,
    longitude: item.longitude ? parseFloat(item.longitude) : null,
    rating: item.rating || '4.5',
    distance: item.distanceKm ? `${item.distanceKm}km` : item.distance || null,
    level: item.level || '',
    type: item.typeName || item.type,
    raw: item,
  };
}

/**
 * 解析距离字符串为数字（用于排序）
 * @param {string|number} value - 距离值
 * @returns {number} 数字距离
 */
export function parseDistance(value) {
  if (!value) return Number.MAX_SAFE_INTEGER;
  const num = parseFloat(String(value).replace(/km/i, ''));
  return isNaN(num) ? Number.MAX_SAFE_INTEGER : num;
}

/**
 * 格式化图片URL
 * @param {string} url - 图片URL
 * @param {string} fallback - 默认图片
 * @returns {string} 格式化后的URL
 */
export function formatImageUrl(
  url,
  fallback = 'https://via.placeholder.com/400x300?text=%E5%9B%BE%E7%89%87',
) {
  if (!url || typeof url !== 'string' || url.length === 0) {
    return fallback;
  }
  return url;
}

/**
 * 获取阴影样式
 * @param {string} size - 阴影大小 'sm' | 'md' | 'lg'
 * @returns {Object} 阴影样式对象
 */
export function getShadowStyle(size = 'md') {
  return SHADOWS[size] || SHADOWS.md;
}

/**
 * 获取卡片样式
 * @param {string} variant - 卡片变体 'base' | 'bordered'
 * @returns {Object} 卡片样式对象
 */
export function getCardStyle(variant = 'base') {
  return CARD_STYLES[variant] || CARD_STYLES.base;
}

/**
 * 验证坐标是否有效
 * @param {number} latitude - 纬度
 * @param {number} longitude - 经度
 * @returns {boolean} 是否有效
 */
export function isValidCoordinate(latitude, longitude) {
  return (
    typeof latitude === 'number' &&
    typeof longitude === 'number' &&
    !isNaN(latitude) &&
    !isNaN(longitude) &&
    latitude !== null &&
    longitude !== null
  );
}

/**
 * 过滤有效的景点数据（有坐标的）
 * @param {Array} items - 景点数组
 * @returns {Array} 过滤后的数组
 */
export function filterValidAttractions(items) {
  return items.filter(item => isValidCoordinate(item.latitude, item.longitude));
}
